Object oriented programming is a powerful programming tool. An object oriented program is one that has as its basic foundation a set of building blocks called objects, each of which is a representation or abstraction of a physical element or a logical concept. An object is defined by a set of data that represents specific attributes or properties of the object, and a set of functions or methods that can be performed on or by the object. Each object can receive messages instructing it to perform a particular function, or send such messages to other objects. Objects are reusable, and can also be called on by a variety of different application programs.
Objects must reside in memory, and each time an object is created by an application program memory must be allocated to store that object. In known objected oriented programs, memory is allocated form a common pool of free memory that is available to all application programs, commonly known as the heap. Although the act of allocating memory itself is a relatively simple task if memory is available, continued allocation of memory for new objects without also deallocating memory for objects that are no longer being used will slowly deplete the available memory space. This slow depletion of memory is referred to as a "memory leak", and is a common problem in current object oriented programs. Further, known object oriented programs also continue to create new objects while the application program is running without keeping track of the availability of memory space in the heap. Consequently, any memory leaks may reach a critical point at any time. The obvious consequences of this are program or system failure, and loss of data. Thus, memory allocation and deallocation in object oriented programming, otherwise known as memory management, is of great concern and has traditionally been extremely problematic.
Memory management concerns have previously been addressed by various types of products or programs that manage the deletion of objects, such as well known garbage collection products. Although somewhat effective in reducing the danger of memory leaks, allocation of objects from the heap still proceeds during program execution without any feedback regarding available memory. Thus, it is always possible that insufficient memory will result in program or system failure. Accordingly, programs that manage the deletion of objects do not address a fundamental problem; that in known object oriented programs memory allocation occurs continuously and in ignorance of the state of available memory. Thus, it can never be guaranteed that sufficient memory will be available for the duration of the running time of the application program.